<?php

namespace JsonLowCode\Traits;

trait HasLifeCycle
{
    /**
     * 设置生命周期函数
     * @param string $key 函数名
     * @param string $value 完整的函数
     * @return $this
     */
    public function lifecycle(string $key, string $value): static
    {
        $this->lifeCycles[$key] = JSFunction($value);
        return $this;
    }

    /**
     * setup
     * @param string $value
     * @return $this
     */
    public function setup(string $value): static
    {
        return $this->lifecycle('setup',$value);
    }

    /**
     * 设置beforeMount生命周期函数
     * @param string $value js代码
     * @return $this
     */
    public function onBeforeMount(string $value): static
    {
        return $this->lifecycle('onBeforeMount',$value);
    }

    /**
     * 设置mounted生命周期函数
     * @param string $value js代码
     * @return $this
     */
    public function onMounted(string $value): static
    {
        return $this->lifecycle('onMounted',$value);
    }

    /**
     * 设置beforeUpdate生命周期函数
     * @param string $value 完整的函数
     * @return $this
     */
    public function onBeforeUpdate(string $value): static
    {
        return $this->lifecycle('onBeforeUpdate',$value);
    }

    /**
     * 设置beforeUpdate生命周期函数
     * @param string $value 完整的函数
     * @return $this
     */
    public function onUpdated(string $value): static
    {
        return $this->lifecycle('onUpdated',$value);
    }

    /**
     * 设置beforeUnmount生命周期函数
     * @param string $value 完整的函数
     * @return $this
     */
    public function onBeforeUnmount(string $value): static
    {
        return $this->lifecycle('onBeforeUnmount',$value);
    }

    /**
     * 设置beforeUnmount生命周期函数
     * @param string $value 完整的函数
     * @return $this
     */
    public function onUnmounted(string $value): static
    {
        return $this->lifecycle('onUnmounted',$value);
    }

    /**
     * 设置beforeUnmount生命周期函数
     * @param string $value 完整的函数
     * @return $this
     */
    public function onErrorCaptured(string $value): static
    {
        return $this->lifecycle('onErrorCaptured',$value);
    }
}
